package main

import "fmt"

func chan1() {
	ch1 := make(chan int)
	go func() {
		fmt.Println("====子协程执行====")
		data := <-ch1
		fmt.Println("读取通道中的数据是：", data)
	}()
	fmt.Println("====主协程执行====")
	ch1 <- 10
	fmt.Println("====主协程知悉结束====")
}

func chan2() {
	ch2 := make(chan int)
	go func() {
		fmt.Println("===子协程执行====")
		ch2 <- 20
		fmt.Println("===子协程执行结束===")
	}()
	data := <-ch2
	fmt.Println("读取的通道数据是：", data)
	fmt.Println("====主协程执行结束====")
}

func chan3() {
	ch3 := make(chan int)
	go func() {
		fmt.Println("子协程开始执行")
		for i := 0; i < 10; i++ {
			ch3 <- i
		}
		close(ch3)
	}()
	for {
		v, ok := <-ch3
		if !ok {
			fmt.Println("子协程已将通道关闭")
			break
		}
		fmt.Println("获取的通道数据是：", v)
	}
	fmt.Println("主协程执行结束")
}

func chan4() {
	ch4 := make(chan int, 5)
	go func() {
		for i := 0; i < 10; i++ {
			ch4 <- i
			fmt.Println("子协程写入数据：", i)
		}
		close(ch4)
	}()
	for {
		v, ok := <-ch4
		if !ok {
			fmt.Println("通道关闭")
			break
		}
		fmt.Println("读取通道的数据：", v)
	}
}
func main() {
	// chan1()
	// chan2()
	// chan3()
	chan4()

}
